
 /**
  *@param typeof 可以识别undefined，number,string, boolean, symbol
  */

  /**
  * deepClone
  */
function deepClone (obj = {}) {
  if (typeof obj !== 'object' || obj === null) {
    return obj
  }
  let cloneResult = obj instanceof Array ? [] : {}
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) cloneResult[key] = deepClone(obj[key])
  }
  return cloneResult
}
let obj1 = {
  name: 'fanchao',
  age: 25,
  family: ['brother', 'parents', 'grandParent']
}
let obj2 = deepClone(obj1)
console.log(obj1)
console.log('--------------------')
console.log(obj2)
obj2.family.push('wife')
console.log(obj1)
console.log('--------------------')
console.log(obj2)
/**
 * 所有自由变量的查找都是在函数定义的地方向上级作用域查找， 不是在执行的地方进行查找
 */

 /**
  * this 取什么值是在函数执行时确定的，不是在定义
  */